# 8-1写出下列程序的执行结果
def func():
    x = 77
    z = y*2
    print("x+z=",x+z)

x = 1
y = 1
func()
print("x=",x)
print("y=",y)
# 执行结果
# x+z= 79
# x= 1
# y= 1

# 8-2写出下列程序的执行结果，并描述其执行过程
def func(x):
    if x <= 1:
        return 1
    return x*func(x-2)
print(func(9))
# 执行结果
# 945
# 执行过程：
# func(9) = 9 * func(7) = 9 * 7 * func(5) = 9 * 7 * 5 * func(3) = 9 * 7 * 5 * 3 * func(1) = 9 * 7 * 5 * 3 * 1 = 945

# 8-3编写一个函数，计算一个整数的各位数字之和
def sum_numbers(n):
    result = sum(int(numbers) for numbers in str(n))
    print("各位数字之和为：", result)
sum_numbers(input("请输入一个整数："))

# 8-4编写函数计算f(i),其f(i)的计算公式为:f(i)=1/2+2/3+3/4+…+i/(i+1)。
def f(i):
    if i == -1:
        print("输入错误")
    else:
        result = sum(j/(j+1) for j in range(1, i+1))
        print("计算结果结果为：", result)
f(int(input("请输入一个数字：")))

# 8-5编写三个函数分别实现把一个整数转换成十六进制、八进制、二进制表示的字符串
class num_systems_Conversion:
    def __init__(self, num):
        self.num = num
    def hex(self):
        print("十六进制表示为：", hex(self.num))
    def oct(self):
        print("八进制表示为：", oct(self.num))
    def bin(self):
        print("二进制表示为：", bin(self.num))
num = num_systems_Conversion(int(input("请输入一个整数：")))
num.hex()
num.oct()
num.bin()

# 8-6编写函数计算一个或不特定多个数的乘积。
class Multiply:
    def __init__(self, *args): # *args 是一个特殊的语法，用于在函数定义中接收任意数量的位置参数
        self.args = []
    def calculate(self):
        result = 1
        for i in self.args:
            result *= i
        print("乘积为：", result)
    def input_number(self):
        while True:
            num = input("请输入一个整数（输入Enter结束）：")
            try:
                if num == "":
                    break
                else:
                    self.args.append(int(num))
            except Exception as e:
                print(f"输入错误{e}，请重新输入")

multiply = Multiply()
multiply.input_number()
multiply.calculate()

# 8-7编写程序打印输出前100个回文素数。要求每行打印输出10个,判断素数和实现反序数都用函数实现。
# 回文素数：既是素数又是回文数的数
# 素数：只能被1和自身整除的数
# 回文数：正序和倒序都相同的数
class PalindromePrime:
    def __init__(self, n):
        self.n = n
    def is_prime(self, num):
        if num < 2:
            return False
        else:
            for i in range(2, int(num**0.5)+1):
                if num % i == 0:
                    return False
            return True
    def is_palindrome(self, number):
        return str(number) == str(number)[::-1]
# 定义一个列表存储回文素数
    def print_palindrome_prime(self):
        num_PalindromePrime = []
        for i in range(2, self.n+1):
            if self.is_prime(i) and self.is_palindrome(i):
                num_PalindromePrime.append(i)
        for i in range(0, len(num_PalindromePrime), 10):
            print(num_PalindromePrime[i:i+10])
pa_pr = PalindromePrime(100)
pa_pr.print_palindrome_prime()


